﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kaskelot.Services.Model;

namespace Stockholm.SOA.Kaskelot.WCF.ServiceImplementation.Mapping
{
	public static class BemanningValdistriktExtensions
	{
		public static DataContracts.BemanningValdistrikt ToContract(this BemanningValdistrikt entity)
		{
			DataContracts.BemanningValdistrikt b = new DataContracts.BemanningValdistrikt();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static DataContracts.BemanningValdistrikt ToMinimalContract(this BemanningValdistrikt entity)
		{
			DataContracts.BemanningValdistrikt b = new DataContracts.BemanningValdistrikt();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static BemanningValdistrikt ToEntity(this DataContracts.BemanningValdistrikt b)
		{
			BemanningValdistrikt entity = new BemanningValdistrikt();

			CopyToEntity(b, entity);

			return entity;
		}

		public static void UpdateEntity(this BemanningValdistrikt entity, DataContracts.BemanningValdistrikt BemanningValdistrikt)
		{
			CopyToEntity(BemanningValdistrikt, entity);
		}

		private static void CopyFromEntity(BemanningValdistrikt from, DataContracts.BemanningValdistrikt to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.TackatJa = from.TackatJa;
			to.PersonId = from.PersonId;
			to.FunktionId = from.FunktionId;
			to.ValdistriktId = from.ValdistriktId;
			to.ValNamn = from.Valdistrikt.Forsamling.Valkrets.Val.Benamning;
			to.ValDatum = from.Valdistrikt.Forsamling.Valkrets.Val.ValDatum.HasValue ? from.Valdistrikt.Forsamling.Valkrets.Val.ValDatum.Value.Year.ToString() : string.Empty;

			if (from.Person != null)
				to.PersonNamn = from.Person.Fornamn + " " + from.Person.Efternamn;
			to.PersonPersonnummer = from.Person != null ? from.Person.Personnummer : String.Empty;
			to.PersonEpost = from.Person != null ? from.Person.Epost : String.Empty;

			to.FunktionNamn = from.Funktion.Beskrivning;
			to.FunktionFullName = from.Funktion.PublikBeskrivning;
			// Svenskt variabelnamn för mallbrev
			to.FunktionPubliktNamn = from.Funktion.PublikBeskrivning;
			to.ValdistriktNamn = from.Valdistrikt.ToMinimalContract().FullName;

			to.MilErsattning = from.MilErsattning.HasValue ? from.MilErsattning.Value : 0;
			to.TaxiUtlagg = from.TaxiUtlagg.HasValue ? from.TaxiUtlagg.Value : 0;

			if (minimal)
				return;

			to.Person = from.Person != null ? from.Person.ToMinimalContract() : null;
		}

		private static void CopyToEntity(DataContracts.BemanningValdistrikt from, BemanningValdistrikt to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.TackatJa = from.TackatJa;
			to.PersonId = from.PersonId;
			to.FunktionId = from.FunktionId;
			to.ValdistriktId = from.ValdistriktId;

			to.MilErsattning = from.MilErsattning;
			to.TaxiUtlagg = from.TaxiUtlagg;
		}
	}
}
